package com.kjlink.widget.monitoring.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.kjlink.widget.monitoring.enums.EventTypeEnum;
import com.kjlink.widget.monitoring.enums.MonitorTypeEnum;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 描述:
 * 事件源数据模型
 *
 * @author Vic.xu
 * @since 2025-08-01 15:21
 */
@Getter
@Setter
public class MonitorDataModel<T extends BaseMonitorDataExtraModel> implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 事件类型
     */
    @NotEmpty
    protected EventTypeEnum eventType;

    /**
     * 监控类型
     */
    @NotEmpty
    protected MonitorTypeEnum monitorType;
    /**
     * 事件唯一id
     */
    private String eventId;

    /**
     * 事件 关联的业务id
     */
    @NotEmpty
    protected String businessId;

    /**
     * 事件 关联的业务类型
     */
    @NotEmpty
    protected String businessType;

    /**
     * 事件 创建者
     */
    @NotEmpty
    protected String createdBy;

    /**
     * 事件 发生时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    protected LocalDateTime occurTime;

    /**
     * 发生地点
     */
    @NotEmpty
    protected String occurPlace;

    /**
     * 交易代码
     */
    protected String tranCode;

    /**
     * 资源代码
     */
    protected String resourceCode;


    /**
     *错误代码
     */
    @NotEmpty
    protected String eventCode;

    /**
     * 业务异常情况（非必填）<br>
     * 说明: 异常详细说明，如"余额不足"
     */
    private String exception;

    /**
     * 业务源应用（非必填）<br>
     * 说明: 业务链路起始应用ID，如"SRC001"
     */
    private String sourceAppcode;

    /**
     * 业务目标应用（非必填）<br>
     * 说明: 业务链路目标应用ID，如"DEST001"
     */
    private String targetAppcode;


    /**
     * 事件 额外的数据
     */
    protected T extra;



}
